package com.itbaizhan.service;

import com.itbaizhan.dao.StudentDao;
import com.itbaizhan.domain.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/*注解实现IOC*/
/*Component作用：用于创建对象，放入Spring容器，相当于<bean id="" class="">
位置：类上方
一般用于工具层  或不知道是哪类的层
@Component注解配置bean的默认id是首字母小写的类名。也可以手动设置bean的id值。
这里的id是：studentService (小写开头)*/
/*@Repository、@Service、@Controller
* 作用：这三个注解和@Component的作用一样，
* 使用它们是为了区分该类属于什么层。
位置：
@Repository用于Dao层
@Service用于Service层
@Controller用于Controller层*/
/*作用：指定bean的创建策略
位置：类上方
取值：singleton prototype request session globalsession*/
//@Component
@Service
//@Scope("singleton")  //单例（单个对象）
@Scope("prototype")//多例（多个对象）
public class StudentService {
   @Autowired
   @Qualifier("studentDaoImpl2")
    private StudentDao studentDao;
   //直接注入
   // @Value("hello")
   private String str;
    //@Value("1")

   private int count;

   //把这两个属性放进@value中
    //1,先创建properties配置方件
    /*2,在bean配置文件中 <context:property-placeholder>*/
    @Value("${jdbc.username}")
   private String username;
    //${} spring表达式
    @Value("${jdbc.password}")
   private String password;

    @Override
    public String toString() {
        return "StudentService{" +
                "studentDao=" + studentDao +
                ", str='" + str + '\'' +
                ", count=" + count +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public StudentDao getStudentDao() {
        return studentDao;
    }
    //@Autowired
    public void setStudentDao(StudentDao studentDao) {
        this.studentDao = studentDao;
    }
    //@Autowired
    public StudentService(StudentDao studentDao) {
        this.studentDao = studentDao;
    }

    public Student findById(int id){
        return studentDao.findById(id);

    }
}
/*要在配置文件中配置扫描的包，扫描到该注解才能生效。

<context:component-scan base-package="com.itbaizhan"></context:component-scan>*/

/*@Autowired 作用：从容器中查找符合属性类型的对象自动注入属性中。用于代替<bean>中的依赖注入配置。

位置：属性上方、setter方法上方、构造方法上方。

注意：
容器中没有对应类型的对象会报错
容器中有多个对象匹配类型时，会找beanId(@Repository()括号中的字段是id)等于属性名的对象，找不到会报错。
*/

/*@Qualifier
* @Qualifier必须与@Autowired一起用
*作用：在按照类型注入对象的基础上，再按照bean的id注入。（id:可以是@Repository()括号中的字段 也可以是是首字母小写的类名）

位置：属性上方 */

/*@value*/